Devices connected to computer networks have a need for a unique network address in order to communicate on the network. In many networks, the network address is allocated or assigned automatically, avoiding the need for manual configuration by a user. The automatic allocation of addresses is typically centralized in a dedicated device on the network that provides an address-assignment service, such as the Dynamic Host Configuration Protocol (DHCP). The use of a centralized address-assignment service avoids the occurrence of network address conflicts.
Various types of computer networks exist. A traditional computer network includes network infrastructure, such as routers and switches, as well as dedicated devices providing network services such as DHCP.
A mesh network is a self-learning network of loosely connected computing devices. The devices connected to the mesh typically distribute packets throughout the mesh, allowing for the network to operate with limited or no infrastructure. The mesh network requires no maintenance, and can be very robust if a sufficient density of connected computing devices has been achieved. Mesh networks are particularly useful in developing countries lacking the infrastructure to form a traditional computer network.
Some computing devices may offer a service to other devices, such as a DHCP service, a data storage service, or a printing service. It is often desirable for such a device to advertise to other devices the service(s) it provides. For example, a router in a network may advertise its routing capability to other devices using a protocol such as the Internet Control Message Protocol (ICMP). An ad-hoc device, such as a device operating over the Bluetooth® protocol may also advertise a service it provides. For example, a cellular phone capable of exchanging data over a cellular network may advertise that capability over a Bluetooth® protocol to other devices. A Bluetooth® equipped laptop computer, for example, could then connect to external networks through the cellular phone to exchange data with other computers.